package cn.git.shiro.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {

    /**
     * 自定义Redis序列化器，用于序列化Redis中的数据。
     */
    private static final FastJson2JsonRedisSerializer REDIS_SERIALIZER = new FastJson2JsonRedisSerializer();

    @Autowired
    private RedisConnectionFactory redisConnectionFactory;


    /**
     * 配置并返回一个RedisTemplate bean，用于操作Redis数据库。
     * 这个模板配置了各种序列化器，以确保键和值在与Redis进行交互时能够正确序列化和反序列化。
     *
     * @return RedisTemplate<String, Object> 一个配置好的Redis模板，适用于字符串键和任意类型值的操作。
     */
    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory); // 设置Redis连接工厂

        redisTemplate.setEnableTransactionSupport(false); // 禁用事务支持
        // 序列化配置
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(REDIS_SERIALIZER);
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(REDIS_SERIALIZER);
        redisTemplate.setDefaultSerializer(new StringRedisSerializer());
        // 初始化模板
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }


}

